﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ServiceSATT;
using ApplicationContext;

namespace UI_SATT
{
    public partial class FrmCierreTorneos : Form, IListadoPartidos, IListadoSede, IInterfazEventos, IInterfazPartido
    {
        string ImplementaPartido = "PartidoService";
        string ImplementaSede = "SedeService";
        string ImplementaEvento = "EventoService";
        public static string[][] Equipo1 = new string[2][];
        public static string[][] Equipo2 = new string[2][];
        public static string[] DatosArbitro = new string[2];
        IPartidoService PartidoServicio;
        string EventoActual, TorneoActual, ClubActual;
        Form NuevoEquipo;
        Form BuscarArbitro;
        public FrmCierreTorneos(string _Evento, string _Torneo)
        {
            InitializeComponent();
            EventoActual = _Evento;
            TorneoActual = _Torneo;
        }

        private void FrmCierreTorneos_Load(object sender, EventArgs e)
        {
            PartidoServicio = (IPartidoService)AppContext.Instance.GetObject(ImplementaPartido);
            PartidoServicio.Listado(this);
            IEventoService EventoServicio = (IEventoService)AppContext.Instance.GetObject(ImplementaEvento);
            EventoServicio.Buscar(this);
            IListadoSedeService SedeServicio = (IListadoSedeService)AppContext.Instance.GetObject(ImplementaSede);
            SedeServicio.Listar(this);
            lblDescripcion.Text = "Partidos de: " + EventoActual + " - " + TorneoActual + " :";
        }

        #region Miembros de IListadoPartidos

        public string Torneo
        {
            get { return TorneoActual; }
        }

        public string[][] Listado
        {
            set
            {
                if (DgvPartidosTorneo.ColumnCount == 0)
                {
                    DgvPartidosTorneo.Columns.Add("Equipo1", "Equipo 1");
                    DgvPartidosTorneo.Columns.Add("Equipo2", "Equipo 2");
                    DgvPartidosTorneo.Columns.Add("Sede", "Sede donde se juega");
                    DgvPartidosTorneo.Columns.Add("Cancha", "Cancha");
                    DgvPartidosTorneo.Columns.Add("Arbitro", "Arbitro");
                    DgvPartidosTorneo.Columns.Add("Fecha", "Fecha");
                    DgvPartidosTorneo.Columns.Add("Ronda", "Ronda");
                    DgvPartidosTorneo.Columns.Add("Estado", "Estado");
                }
                if (DgvPartidosTorneo.Rows.Count > 0)
                    DgvPartidosTorneo.Rows.Clear();
                if(value.Length > 0)
                    DgvPartidosTorneo.Rows.Add(value.Length);
                int i = 0;
                foreach (string[] Objeto in value)
                {
                    if (Objeto != null)
                    {
                        DgvPartidosTorneo.Rows[i].Cells["Equipo1"].Value = Objeto[1].ToString();
                        DgvPartidosTorneo.Rows[i].Cells["Equipo2"].Value = Objeto[2].ToString();
                        DgvPartidosTorneo.Rows[i].Cells["Sede"].Value = Objeto[3].ToString();
                        DgvPartidosTorneo.Rows[i].Cells["Cancha"].Value = int.Parse(Objeto[4]);
                        DgvPartidosTorneo.Rows[i].Cells["Arbitro"].Value = Objeto[5].ToString();
                        DgvPartidosTorneo.Rows[i].Cells["Fecha"].Value = Convert.ToDateTime(Objeto[6]);
                        DgvPartidosTorneo.Rows[i].Cells["Ronda"].Value = int.Parse(Objeto[7]);
                        string Estado = "";
                        switch (int.Parse(Objeto[8]))
                        {
                            case 0:
                                Estado = "Activo";
                                break;
                            case 1:
                                Estado = "Terminado";
                                break;
                        }
                        DgvPartidosTorneo.Rows[i].Cells["Estado"].Value = Estado;
                    }
                }
            }
        }

        #endregion

        #region Miembros de IListadoSede

        public string Club
        {
            get { return ClubActual; }
        }

        string[][] IListadoSede.Listado
        {
            set 
            {
                if (CboSedes.Items.Count > 0)
                    CboSedes.Items.Clear();
                foreach (string[] Objeto in value)
                {
                    CboSedes.Items.Add(Objeto[0]);
                }
            }
        }

        #endregion

        #region Miembros de IInterfazEventos

        public int IdEvento
        {
            get
            {
                throw new NotImplementedException();
            }
            set { }
        }

        public string Nombre
        {
            get { return EventoActual; }
        }

        public string Anfitrion
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                ClubActual = value;
            }
        }

        public DateTime FechaInicio
        {
            get
            {
                throw new NotImplementedException();
            }
            set { }
        }

        public DateTime FechaFin
        {
            get
            {
                throw new NotImplementedException();
            }
            set { }
        }

        public bool Estado
        {
            get
            {
                throw new NotImplementedException();
            }
            set { }
        }

        #endregion

        private void BtnGuardarCambios_Click(object sender, EventArgs e)
        {
            try
            {
                PartidoServicio.Agregar(this);
                PartidoServicio.Listado(this);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        #region Miembros de IInterfazPartido

        public int IdPartido
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string Evento
        {
            get { return EventoActual; }
            set { EventoActual = value; }
        }

        string IInterfazPartido.Torneo
        {
            get
            {
                return TorneoActual;
            }
            set
            {
                TorneoActual = value;
            }
        }

        public DateTime Fecha
        {
            get
            {
                return DtpFechaPartido.Value;
            }
            set
            {
                DtpFechaPartido.Value = value;
            }
        }

        public int Cancha
        {
            get
            {
                return int.Parse(TxtCancha.Text);
            }
            set
            {
                TxtCancha.Text = value.ToString();
            }
        }

        public string Sede
        {
            get
            {
                return CboSedes.SelectedItem.ToString();
            }
            set
            {
                CboSedes.SelectedItem = value;
            }
        }

        public int DniArbitro
        {
            get
            {
                return int.Parse(DatosArbitro[0]);
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public int Ronda
        {
            get
            {
                return int.Parse(TxtRonda.Text) ;
            }
            set
            {
                TxtRonda.Text = value.ToString();
            }
        }

        public string Resultado
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        int IInterfazPartido.Estado
        {
            get
            {
                return CboEstado.SelectedIndex;
            }
            set
            {
                CboEstado.SelectedIndex = value;
            }
        }

        public int IdInscEquipo1 { get { return int.Parse(Equipo1[0][1]); } }
        public int IdInscEquipo2 { get { return int.Parse(Equipo2[0][1]); } }

        #endregion

        private void BtnEquipo1_Click(object sender, EventArgs e)
        {
            NuevoEquipo = new FrmListaInscriptos("Equipo1",TorneoActual,EventoActual);
            if (NuevoEquipo.ShowDialog() == DialogResult.OK)
            {
                if (Equipo1[1] !=null)
                    TxtEquipo1.Text = Equipo1[0][0] + " - " + Equipo1[1][0];
                else
                    TxtEquipo1.Text = Equipo1[0][0];
            }
        }

        private void BtnEquipo2_Click(object sender, EventArgs e)
        {
            NuevoEquipo = new FrmListaInscriptos("Equipo2",TorneoActual,EventoActual);
            if (NuevoEquipo.ShowDialog() == DialogResult.OK)
            {
                if (Equipo2[1]!=null)
                    TxtEquipo2.Text = Equipo2[0][0] + " - " + Equipo2[1][0];
                else
                    TxtEquipo2.Text = Equipo2[0][0];
            }
        }

        private void FrmCierreTorneos_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Dispose();
        }

        private void BtnAsignarArbitro_Click(object sender, EventArgs e)
        {
            if (BuscarArbitro == null || BuscarArbitro.IsDisposed)
            {
                BuscarArbitro = new FrmListaArbitros();
                if (BuscarArbitro.ShowDialog() == DialogResult.OK)
                    TxtArbitro.Text = DatosArbitro[1];
            }
            else
                BuscarArbitro.BringToFront();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form Resultado = new FrmResultadoPartido(int.Parse(Equipo1[0][1]),int.Parse(Equipo2[0][1]),this);
        }
    }
}
